iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
SideProject30

從零開始的firebase與Vue框架ーSNS專案系列 第 8

Day8—Vue(二)Composition API與Options API

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230923/201623191wQyZ5NbLf.png

前言

接著繼續看官方文件,我們可以看到官方提到Vue的組件可以按照兩種不同風格書寫,分別是選項式API以及組合式API

從Vue 3.0開始,引入了Composition API作為選擇性 API 的一部分。Composition APIOptions API是Vue開發中兩種不同的API風格,它們各自具有不同的特點和用法。

以下是Composition APIOptions API之間的主要區別,包括項目、代碼示例和圖表:

1. 項目結構(Project Structure)

Options API(選擇性 API):

  • 使用 datamethodscomputed 等選項來組織代碼。
  • 簡單且易於理解。它遵循一個清晰的聲明式模式,對許多開發者來說都很熟悉。
  • 但代碼結構在較大的組件中可能變得複雜,難以維護

Composition API:

  • 用更多的函數式編程風格,將代碼根據功能進行組織。
  • 可以更容易地重用代碼片段,提高了代碼的可維護性

2. 代碼示例(Code Example)

Options API:

依照選項功能區分程式碼:

必須在對應的methodsdata寫對應的代碼

data():將變數寫在這一區,可以透過this訪問

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Vue!',
    };
  },
};
</script>

methods:將function寫入這一區

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Vue!',
    };
  },
  methods: {
    changeMessage() {
      this.message = 'New Message';
    },
  },
};
</script>

mounted:負責元件的生命週期

<script>
export default {
  data() {
    return {
      message: 'Hello Vue!',
    };
  },
  mounted() {
    console.log('Component is mounted');
  },
};
</script>

官方文件的代碼:

<script>
export default {
  // data() 返回的属性将会成为响应式的状态
  // 并且暴露在 `this` 上
  data() {
    return {
      count: 0
    }
  },

  // methods 是一些用来更改状态与触发更新的函数
  // 它们可以在模板中作为事件处理器绑定
  methods: {
    increment() {
      this.count++
    }
  },

  // 生命周期钩子会在组件生命周期的各个不同阶段被调用
  // 例如这个函数就会在组件挂载完成后被调用
  mounted() {
    console.log(`The initial count is ${this.count}.`)
  }
}
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

Composition API:

依照程式邏輯撰寫,我們不必將代碼侷限於一個個區塊,而是可以自然地利用程式本身邏輯去撰寫。

通过组合式 API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与<script setup>搭配使用。这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如, 中的导入和顶层变量/函数都能够在模板中直接使用。
來源:官方文件

在Composition API中,可以使用refreactivesetup函數來定義數據。
ref用於創建響應式數據,而reactive用於創建響應式對象。
<script setup>函數是組件的入口點,可以在其中定義數據。

官方文件的代碼:

<script setup>
import { ref, onMounted } from 'vue'

// 响应式状态
const count = ref(0)

// 用来修改状态、触发更新的函数
function increment() {
  count.value++
}

// 生命周期钩子
onMounted(() => {
  console.log(`The initial count is ${count.value}.`)
})
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

來源:官方文件

看下面這張圖,就能一目瞭然這兩個API的差異了

總結(簡單比對表格)

功能 Composition API Options API
代碼組織 函數式風格,按功能組織代碼 選項式風格,按選項組織代碼
代碼重用 更容易重用代碼片段 較難重用代碼片段
可讀性 在大型組件中更容易維護 在大型組件中可能變得難以維護
TypeScript 支持 較易於與TypeScript集成 與TypeScript集成較困難
學習曲線 較陡峭的學習曲線 較平緩的學習曲線
生態系統 與Vue 2相容,但有些插件較少 與Vue 2相容,生態系統較完整

參考文章

  1. VUE官方文件
  2. Options API vs Composition API
  3. 不只懂 Vue 語法:試說明 Composition API 與 Options API 概念和語法的分別?
  4. 真的好想離開 Vue 3 新手村 - Day 5: Option API 和 Composition API 比一比
  5. Vue學習#17 option Api & composition Api 概念
  6. vue3入门01 - 初识 Vue3.x

上一篇
Day7—Vue(一)初探Vue框架
下一篇
Day9—Vue(三)創建Vue專案(Vite)
系列文
從零開始的firebase與Vue框架ーSNS專案31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言